home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 32 / Mac Magazin and MacEasy Magazine CD - Issue 32.iso / Grafik & Text / OzTeX3.0 / Metafont / Inputs / ec / exbraces.mf < prev    next >
Text File  |  1997-03-16  |  10KB  |  269 lines

  1. % exbraces.mf
  2. %
  3. % (c) Copyright 1995, 1996, 1997 J"org Knappen
  4. % (c) Copyright 1990, 1992 Norbert Schwarz
  5. %
  6. % This file is part of ecfonts version 1.0 Patchlevel 3
  7. %
  8. %
  9. % Please read the files 00readme.txt, 00inst.txt, 00error.txt, and
  10. % copyrite.txt for further information
  11. %
  12. % You find some documentation in ecdoc.tex (needs LaTeX2e)
  13. %
  14. % Content:
  15. %
  16. % braces and some special characters
  17. %
  18. version_check(1,0);  % |version_check| was introduced in dc1.3
  19.  
  20. ecchar "Circumflex (hat)";
  21. beginchar(oct"136",11u#,min(asc_height#,2x_height#),0);
  22. if serifs: italcorr .5[x_height#,h#]*slant+.5hair#-1.75u#;
  23.  adjust_fit(0,0);
  24.  pickup crisp.nib; pos2(.5[vair,curve],90); top y2r=.75[x_height,h]; x2=.5w;
  25.  x1=w-x3=good.x 2.25u; y1=y3=.25[x_height,y2];
  26.  pos1(hair,angle(z2-z1)+90); pos3(hair,angle(z3-z2)+90);
  27.  filldraw stroke z1e--z2e--z3e;  % diagonals
  28. else: italcorr 2/3[x_height#,h#]*slant-.5stem#+.5vair#-.75u#;
  29.  adjust_fit(0,0);
  30.  pickup fine.nib; pos1(vair,0); pos3(vair,0); x1=w-x3;
  31.  pos2(stem,0); top y2=2/3[x_height,h]; x2=.5w; bot y1=bot y3=vround x_height-eps;
  32.  lft x1l=hround(rt x2r-3.25u-.5vair);
  33.  z0=whatever[z1r,z2r]=whatever[z2l,z3l];
  34.  y4l=y4r=y2; x4l=good.x .2[x2l,x2]; x4r=w-x4l;
  35.  filldraw z4l--z1l--z1r--z0--z3l--z3r--z4r--cycle; fi  % diagonals
  36. penlabels(0,1,2,3,4); endchar;
  37.  
  38.  
  39.  
  40. ecchar "Tilde (squiggle)";
  41. beginchar(oct"176",11u#,min(asc_height#,
  42.                           10/7x_height#+.5dot_size#),0);
  43. italcorr h#*slant-u#;
  44. adjust_fit(0,0);
  45. if serifs: numeric theta; theta=angle(1/6(6u-vair),1/4(h-x_height));
  46.  pickup crisp.nib; numeric mid_width; mid_width=.4[vair,stem];
  47.  pos1(vair,theta+90); pos2(vair,theta+90);
  48.  pos3(vair,theta+90); pos4(vair,theta+90);
  49.  z2-z1=z4-z3=(mid_width-crisp)*dir theta;
  50.  lft x1r=w-rt x4l=hround 1.5u; top y4r=h;
  51.  bot y1l=vround(bot y1l+min(2/3[x_height,h],y3l-.25vair)-top y1r);
  52.  pair delta; ypart delta=3(y3l-y1l); delta=whatever*dir theta;
  53.  filldraw z1l..controls(z1l+delta)and(z3l-delta)..z3l..z4l
  54.   --z4r..controls(z4r-delta)and(z2r+delta)..z2r..z1r--cycle;  % stroke
  55. else: pickup fine.nib; pos1(vair,180); pos2(vair,90);
  56.  pos3(.5[vair,slab],90); pos4(vair,90); pos5(vair,180);
  57.  lft x1r=w-rt x5l=hround 1.5u; x2-x1=x3-x2=x4-x3=x5-x4;
  58.  bot y1=bot y4l=vround(.75[x_height,h]-vair);
  59.  top y2r=top y5=h; y3=.5[y2,y4];
  60.  filldraw stroke z1e{up}...z2e{right}..z3e..{right}z4e...{up}z5e; fi % stroke
  61. penlabels(1,2,3,4,5); endchar;
  62.  
  63. ecchar "Compound word mark";
  64. beginchar(oct"027",0,x_height#,0);
  65. zero_width;
  66. endchar;
  67.  
  68. ecchar "Left parenthesis";
  69. beginchar("(",7u# if monospace: -u# fi,body_height#,paren_depth#);
  70. italcorr body_height#*slant-.5u#;
  71. adjust_fit(0,0); pickup fine.nib;
  72. pos1(vair,0); pos2(.75[hair,stem],0); pos3(vair,0);
  73. rt x1r=rt x3r=hround(w-u); lft x2l=hround(x1-4u if monospace: +4/3u fi);
  74. top y1=h; y2=.5[y1,y3]=math_axis;
  75. filldraw stroke z1e{3(x2e-x1e),y2-y1}...z2e
  76.  ...{3(x3e-x2e),y3-y2}z3e;  % arc
  77. penlabels(1,2,3); endchar;
  78.  
  79. ecchar "Right parenthesis";
  80. beginchar(")",7u# if monospace: -u# fi,body_height#,paren_depth#);
  81. italcorr math_axis#*slant-.5u#;
  82. adjust_fit(0,0); pickup fine.nib;
  83. pos1(vair,0); pos2(.75[hair,stem],0); pos3(vair,0);
  84. lft x1l=lft x3l=hround u; rt x2r=hround(x1+4u if monospace: -4/3u fi);
  85. top y1=h; y2=.5[y1,y3]=math_axis;
  86. filldraw stroke z1e{3(x2e-x1e),y2-y1}...z2e
  87.  ...{3(x3e-x2e),y3-y2}z3e;  % arc
  88. penlabels(1,2,3); endchar;
  89.  
  90.  
  91. ecchar "Less than sign";
  92. compute_spread(5/4x_height#,3/2x_height#);
  93. beginchar("<",14u#,v_center(spread#+rule_thickness#));
  94. italcorr h#*slant-u#;
  95. adjust_fit(0,0); pickup extra_rule.nib;
  96. lft x2=hround 1.5u-eps; x1=x3=w-x2;
  97. y1-y3=spread; y2=.5[y1,y3]=math_axis;
  98. draw z1--z2--z3;  % diagonals
  99. labels(1,2,3); endchar;
  100.  
  101. ecchar "Vertical line";
  102. beginchar(oct"174",5u#,body_height#,paren_depth#);
  103. italcorr body_height#*slant+.5rule_thickness#-2u#;
  104. adjust_fit(0,0); pickup rule.nib;
  105. x1=x2=good.x .5w; top y1=h+eps; bot y2=-d-eps;
  106. draw z1--z2;  % stem
  107. labels(1,2); endchar;
  108.  
  109.  
  110. ecchar "Greater than sign";
  111. compute_spread(5/4x_height#,3/2x_height#);
  112. beginchar(">",14u#,v_center(spread#+rule_thickness#));
  113. italcorr math_axis#*slant-u#;
  114. adjust_fit(0,0); pickup extra_rule.nib;
  115. rt x2=hround(w-1.5u)+eps; x1=x3=w-x2;
  116. y1-y3=spread; y2=.5[y1,y3]=math_axis;
  117. draw z1--z2--z3;  % diagonals
  118. labels(1,2,3); endchar;
  119.  
  120. ecchar "Left bracket";
  121. numeric wd#; wd#=max(5u#,4.5u#+.5if hefty:stem# else:rule_thickness# fi);
  122. beginchar("[",wd#,body_height#,paren_depth#);
  123. italcorr body_height#*slant;
  124. adjust_fit(0,0);
  125. numeric top_thickness,side_thickness;
  126. % if hefty:
  127.  top_thickness=vair;
  128.  side_thickness=max(crisp.breadth,stem-stem_corr);
  129. % else: top_thickness=side_thickness=rule_thickness; fi;
  130. pickup crisp.nib; pos1(side_thickness,0); pos2(side_thickness,0);
  131. top y1=h; bot y2=-d; lft x1l=lft x2l=hround(2.5u-.5side_thickness)-1-eps;
  132. filldraw stroke z1e--z2e;  % stem
  133. pos3(top_thickness,90); pos4(top_thickness,90);
  134. pos5(top_thickness,90); pos6(top_thickness,90);
  135. x3=x5=x1l; rt x4=rt x6=ceiling(w-.4u)+eps; y3r=y4r=y1; y5l=y6l=y2;
  136. filldraw stroke z3e--z4e;  % upper bar
  137. filldraw stroke z5e--z6e;  % lower bar
  138. penlabels(1,2,3,4,5,6); endchar;
  139.  
  140. ecchar "Right bracket";
  141. numeric wd#; wd#=max(5u#,4.5u#+.5if hefty:stem# else:rule_thickness# fi);
  142. beginchar("]",wd#,body_height#,paren_depth#);
  143. italcorr body_height#*slant-2u#+.5if hefty:stem# else:rule_thickness# fi;
  144. adjust_fit(0,0);
  145. numeric top_thickness,side_thickness;
  146. %if hefty:
  147.   top_thickness=vair;
  148.  side_thickness=max(crisp.breadth,stem-stem_corr);
  149. % else: top_thickness=side_thickness=rule_thickness; fi;
  150. pickup crisp.nib; pos1(side_thickness,0); pos2(side_thickness,0);
  151. top y1=h; bot y2=-d; rt x1r=rt x2r=hround(w-2.5u+.5side_thickness)+1+eps;
  152. filldraw stroke z1e--z2e;  % stem
  153. pos3(top_thickness,90); pos4(top_thickness,90);
  154. pos5(top_thickness,90); pos6(top_thickness,90);
  155. x3=x5=x1r; lft x4=lft x6=floor .4u-eps; y3r=y4r=y1; y5l=y6l=y2;
  156. filldraw stroke z3e--z4e;  % upper bar
  157. filldraw stroke z5e--z6e;  % lower bar
  158. penlabels(1,2,3,4,5,6); endchar;
  159.  
  160.  
  161. ecchar "Reverse slash (backslash)";
  162. beginchar(oct"134",9u#,body_height#,paren_depth#);
  163. adjust_fit(0,0); pickup extra_rule.nib;
  164. lft x1=hround u-eps; top y1=h+eps;
  165. rt x2=hround(w-u)+eps; bot y2=-d-eps;
  166. draw z1--z2;  % diagonal
  167. labels(1,2); endchar;
  168.  
  169. ecchar "Left curly brace";
  170. beginchar(oct"173",9u#,body_height#,paren_depth#);
  171. italcorr body_height#*slant+.5vair#-u#;
  172. adjust_fit(0,0); pickup fine.nib;
  173. forsuffixes $=1,1',4,4',7,7': pos$(vair,0); endfor
  174. forsuffixes $=2,3,5,6: pos$(stem,0); endfor
  175. x2=x3=x5=x6; x1=x1'=x7=x7'=w-x4=w-x4';
  176. lft x4l=hround(1.5u-.5vair); lft x2l=hround(.5w-.5stem);
  177. top y1=h; bot y7=-d; .5[y4,y4']=.5[y1,y7]=.5[y2,y6]=.5[y3,y5];
  178. y1-y2=y3-y4=(y1-y4)/4; y1-y1'=y4-y4'=y7'-y7=vair-fine;
  179. filldraw z1l{left}...z2l---z3l...{left}z4l
  180.  --z4'l{right}...z5l---z6l...{right}z7l
  181.  --z7r--z7'r{left}...z6r---z5r...{left}.5[z4r,z4'r]{right}
  182.  ...z3r---z2r...{right}z1'r--z1r--cycle;  % stroke
  183. penlabels(1,2,3,4,5,6,7); endchar;
  184.  
  185. ecchar "Right curly brace";
  186. beginchar(oct"175",9u#,body_height#,paren_depth#);
  187. italcorr math_axis#*slant+.5vair#-u#;
  188. adjust_fit(0,0); pickup fine.nib;
  189. forsuffixes $=1,1',4,4',7,7': pos$(vair,0); endfor
  190. forsuffixes $=2,3,5,6: pos$(stem,0); endfor
  191. x2=x3=x5=x6; x1=x1'=x7=x7'=w-x4=w-x4';
  192. rt x4r=hround(w-1.5u+.5vair); rt x2r=hround(.5w+.5stem);
  193. top y1=h; bot y7=-d; .5[y4,y4']=.5[y1,y7]=.5[y2,y6]=.5[y3,y5];
  194. y1-y2=y3-y4=(y1-y4)/4; y1-y1'=y4-y4'=y7'-y7=vair-fine;
  195. filldraw z1r{right}...z2r---z3r...{right}z4r
  196.  --z4'r{left}...z5r---z6r...{left}z7r
  197.  --z7l--z7'l{right}...z6l---z5l...{right}.5[z4l,z4'l]{left}
  198.  ...z3l---z2l...{left}z1'l--z1l--cycle;  % stroke
  199. penlabels(1,2,3,4,5,6,7); endchar;
  200.  
  201.  
  202.  
  203.  
  204. ecchar "Underbar";
  205. compute_spread((5/8+.45)*x_height#,(3/4+.55)*x_height#);
  206. beginchar(oct"137",14u#,0,spread#-math_axis#+.5rule_thickness#);
  207. adjust_fit(0,0); pickup rule.nib;
  208. lft x1=hround 1.5u-eps; x2=w-x1; bot y1=bot y2=-d;
  209. draw z1--z2;  % bar
  210. labels(1,2); endchar;
  211.  
  212. iff not monospace:
  213. ecchar "Hyphenchar";
  214. beginchar(oct"177",3u#,x_height#,0);
  215. italcorr .5x_height#*slant-.5u#;
  216. adjust_fit(0,0);
  217. numeric thickness; thickness=if hefty:bar else:.75[hair,stem] fi;
  218. pickup crisp.nib; pos1(thickness,90); pos2(thickness,90);
  219. top y1r=top y2r=vround(.5h+.5thickness); rt x2=hround(2w-u)+eps;
  220. lft x1=hround .2u-eps;
  221. filldraw stroke z1e--z2e;  % bar
  222. penlabels(1,2); endchar;
  223.  
  224. iff monospace:
  225. ecchar "Hyphenchar";
  226. beginchar(oct"177",3u#,x_height#,0);
  227. italcorr .5x_height#*slant-.5u#;
  228. adjust_fit(0,0);
  229. numeric thickness; thickness=if hefty:bar else:.75[hair,stem] fi;
  230. pickup crisp.nib; pos1(thickness,90); pos2(thickness,90);
  231. top y1r=top y2r=vround(.5h+.5thickness); rt x2=hround(w-u)+eps;
  232. x2=w-x1;
  233. filldraw stroke z1e--z2e;  % bar
  234. penlabels(1,2); endchar;
  235.  
  236. iff hefty: % Sans or typewriter
  237. ecchar "Blank-space sign";
  238. beginchar(oct"040",9u#,x_height#,.5desc_depth#);
  239. italcorr bar_height#*slant-.25u#;
  240. adjust_fit(0,0);
  241. numeric thin_vair#; thin_vair#=.7vair#;
  242. define_whole_blacker_pixels(thin_vair);
  243. h:=bar_height;
  244. forsuffixes $=1,2,3,4: penpos$(thin_vair,0); endfor
  245. penpos0(thin_vair,90); x0=.5w; y0l=vround(-d-.5thin_vair);
  246. x1=x2; x3=x4=w-x1; lft x1l=hround .75u;
  247. y1=y4=h; y2=y3=y0;
  248. fill z1l---z2l...(x2,y0l)---(x3,y0l)...z3r---z4r
  249.  ..z4l---(x3l,y0r)--(x2r,y0r)---z1r..cycle;  % the stroke
  250. penlabels(0,1,2,3,4); endchar;
  251.  
  252. iff not hefty: % Other than the above mentioned
  253. ecchar "Blank-space sign"; % jk
  254. beginchar(oct"040",9u#,x_height#,.5desc_depth#);
  255. italcorr bar_height#*slant-.25u#;
  256. adjust_fit(0,0);
  257. numeric shaved_stem; shaved_stem=hround .9[vair,.85cap_stem];
  258. if shaved_stem<crisp.breadth: shaved_stem:=crisp.breadth; fi
  259. pickup crisp.nib;
  260. pos1(shaved_stem,-90); pos2(hair,0);
  261. bot y1r=-d; x1=.5w; rt x2r=hround(w-.75u); y2=good.y(y1l+.5beak)+eps;
  262. arm(1,2,a,beak_darkness,2beak_jut);  % lower right arm and beak
  263. pos3(hair,180); x3=w-x2; y3=y2;
  264. arm(1,3,b,beak_darkness,-2beak_jut);  % lower left arm and beak
  265. math_fit(0,.5ic#);
  266. penlabels(1,2,3); endchar;
  267.  
  268. endinput;
  269.